<?php

namespace Common\Controller;

use Think\Controller;

class BaseController extends Controller {

    protected $iUserId = 0; //用户ID
    protected $iPostId = 0; //所属岗位ID
    protected $iCompanyId = 0; //所属企业ID
    protected $iRoleId = 0; //角色ID(0-普通成员 1-拥有者 2-管理员)

    public function _initialize() {
        $token = cookie('token');
        if ($token) {
            list ($iUserId, $time) = token_decrypt($token);
            if (!empty($iUserId)) {
                //获取session
                $arrUserInfo = S($iUserId);
                $this->iUserId = $arrUserInfo['iUserId'];
                $this->iPostId = $arrUserInfo['iPostId'];
                $this->iCompanyId = $arrUserInfo['iCompanyId'];
                $this->iRoleId = $arrUserInfo['iRoleId'];
            }
//            //设置同一账号唯一终端登录
//            if ($arrUserInfo['token'] != $token){
//                $this->error('您的账号已在别处登录，您被迫下线，如非本人操作，请修改密码后重新登录', '-105');
//            }  
        }

//        $this->iUserId = session('iUserId');
//        $this->iPostId = session('iPostId');
//        $this->iCompanyId = session('iCompanyId');
//        $this->iRoleId = session('iRoleId');
    }

    /**
     * @param string $strMessage 提示信息   
     * @param int $iCode 通用代码
     * @param array $arrData 自定义返回参数
     * @param string $strJumpUrl 跳转URL
     */
    public function success($strMessage = '', $iCode = 1, $arrData = array(), $strJumpUrl = '') {
        $arrReturn['success'] = TRUE;
        $arrReturn['message'] = empty($strMessage) ? '操作成功' : $strMessage;
        $arrReturn['code'] = $iCode;
        $arrReturn['data'] = !empty($arrData) ? $arrData : '';
        if (!empty($strJumpUrl)) {
            $arrReturn['url'] = $strJumpUrl;
        }
        $this->ajaxReturn($arrReturn);
    }

    /**
     * @param string $strMessage 提示信息   
     * @param int $iCode 通用代码
     * @param array $arrData 自定义返回参数
     * @param string $strJumpUrl 跳转URL
     */
    public function error($strMessage = '', $iCode = 0, $arrData = array(), $strJumpUrl = '') {
        $arrReturn['success'] = FALSE;
        $arrReturn['message'] = empty($strMessage) ? '操作失败' : $strMessage;
        $arrReturn['code'] = $iCode;
        $arrReturn['data'] = !empty($arrData) ? $arrData : '';
        if (!empty($strJumpUrl)) {
            $arrReturn['url'] = $strJumpUrl;
        }
        $this->ajaxReturn($arrReturn);
    }

    /**
     * 返回列表数据
     * @param array $list 数据列表
     * @param int $page_no  当前页码
     * @param int $page_size    分页大小
     * @param int $count    总记录条数
     */
    public function returnList($list, $page_no = 0, $page_size = 0, $count = 0) {
        $page_total = ceil($count / $page_size);
        $return = array('success' => true, 'message' => '');
        $return['code'] = $list ? C('CODE_DATA_ISTRUE') : C('CODE_DATA_ISFALSE');
        if ($page_no && $page_size && $count) {
            $return['page'] = array(
                'page_current' => $page_no,
                'page_size' => $page_size,
                'page_total' => $page_total,
                'total' => $count
            );
        }
        $return['data'] = $list;
        $this->ajaxReturn($return);
    }

    /**
     * TODO 上传文件方法
     * @param $fileid form表单file的name值
     * @param $dir 上传到uploads目录的$dir文件夹里
     * @param int $maxsize 最大上传限制，默认1048576 byte = 1*1024*1024 byte = 1M
     * @param array $exts 允许上传文件类型 默认array('gif','jpg','jpeg','bmp','png')
     * @return array 返回array,失败status=0 成功status=1,filepath=newspost/2014-9-9/a.jpg
     */
    protected function uploadfile($fileid, $dir, $maxsize = 1048576, $exts = array('gif', 'jpg', 'jpeg', 'bmp', 'png', 'doc', 'docx')) {
        $upload = new \Think\Upload(); // 实例化上传类
        $upload->maxSize = $maxsize; // 设置附件上传大小，单位字节(微信图片限制1M
        $upload->exts = $exts; // 设置附件上传类型
        $upload->rootPath = './Uploads/'; // 设置附件上传根目录
        $upload->savePath = $dir . '/'; // 设置附件上传（子）目录
        // 上传文件

        $info = $upload->uploadOne($_FILES[$fileid]);

        if (!$info) {// 上传错误提示错误信息
            $this->error($upload->getError());
        } else {// 上传成功
            return '/Uploads/' . $info['savepath'] . $info['savename'];
        }
    }

    /**
     * 获取请求参数
     * @param string $name 变量的名称 支持指定类型
     * @param mixed $default 不存在的时候默认值
     * @param mixed $filter 参数过滤方法
     * @param string $is_must 参数是否必选
     * @param string $msg 错误提示信息
     * @return mixed|NULL
     */
    public function getParam($name, $default = '', $filter = null, $is_must = false, $msg = '') {
        switch ($filter) {
            case 'int+':
                $filter_i = 'int';
                break;
            case 'mobile':
                $filter_i = C('PATTERN_MOBILE');
                break;
            case 'email':
                $filter_i = C('PATTERN_EMAIL');
                break;
            case 'date':
                $filter_i = '/^\d{4}-\d{2}-\d{2}$/';
                break;
            case 'datetime':
                $filter_i = '/^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}$/';
                break;
            default:
                $filter_i = $filter;
                break;
        }
        $val = I($name, $default, $filter_i);
        
        // 必选参数验证
        if ($is_must) {
            $msg = $msg == '' ? "参数错误[{$name}]" : $msg;
            if ($filter == 'int+' && $val <= 0) {
                $this->error($msg);
            } elseif (in_array($filter, array('int', 'intval')) && $val < 0) {   //陈轶豪改
                $this->error($msg);
            } elseif ($val === '') {
                $this->error($msg);
            }
        }
        return $val;
    }

    /**
     * 随堂任务分数计算
     * $score 分数
     */
    protected function _starNum($score) {
        if ($score >= 80 && $score < 90) {
            $starNum = 1;
        } elseif ($score >= 90 && $score < 100) {
            $starNum = 2;
        } elseif ($score == 100) {
            $starNum = 3;
        } else {
            $starNum = 0;
        }
        return $starNum;
    }
    
    /**
     * 进入企业，设置用户在企业的状态【已加入】
     */
    /**
     * 
     * @param type $iUserId
     * @param type $iCompanyId
     */
    protected function setJoinCompanyStatus($iUserId, $iCompanyId) {
        $arrWhere['user_id'] = $iUserId;
        $arrWhere['company_id'] = $iCompanyId;
        $objUserCompanyRelat = M('UserCompanyRelat');
        $relatInfo = $objUserCompanyRelat->where($arrWhere)->find();
        if(!empty($relatInfo) && $relatInfo['status'] == 0){
            $objUserCompanyRelat->where($arrWhere)->save(array('status' => 1));
            set_redis_userinfo($iUserId, 'iStatus', 1);
        }
    }

}
